/******************************************************************************
 cnome: A C++ source "genes" discover. :-)

 See more details at:

   http://www.codeplex.com/cnome

 The original author site is at: http://www.alemosbarbosa.com/

 Copyright (c) 2008-2010 Alexandre Lemos Barbosa.
 Distributed under the MIT License. (See accompanying file LICENSE-MIT.txt 
 or at http://www.codeplex.com/cnome/license)
 ******************************************************************************/

#ifndef ACTIONS_H
#define ACTIONS_H

#include <string>

#include "iterator.h"

namespace cnome { namespace actions {
    void newClass_Name(iterator first, iterator last);
    void newEnum_Name(iterator first, iterator last);
    void newTypedef_Name(iterator first, iterator last);
    void newNamespace_Alias(iterator first, iterator last);
    void newOriginal_Namespace_Name(iterator first, iterator last);
    void newTemplate_Name(iterator first, iterator last);
    void newEnumerator(iterator first, iterator last);
    void newMember(iterator first, iterator last);
    void enter_scope(iterator first, iterator last);
    void leaveScope(iterator first, iterator last);
    void scopeIsAbsolut(iterator first, iterator last);
    void enterMethodScp(iterator first, iterator last);
    void enterScopeMth(iterator first, iterator last);
    void newMethod(iterator first, iterator last);
    void newMethodImpl(iterator first, iterator last, bool isParameterDeclaration);
    void defMethod(iterator first, iterator last);
    void clearPrmLevel(iterator first, iterator last);
    void newParenMethod(iterator first, iterator last);
    void newTmplPrm(iterator first, iterator last);
    void newPrm(iterator first, iterator last);
    void newPrmVar(iterator first, iterator last);
    void newPtfPrmVar(iterator first, iterator last);
    void cancelPrmVar(iterator first, iterator last);
    void last_Identifier(iterator first, iterator last);
    void cancelDecl(iterator first, iterator last);
    void error_Not_Declared(iterator first, iterator last);
    void inFunction_body(iterator first, iterator last);
    void outFunction_body(iterator first, iterator last);
    void newTypeSpc(iterator first, iterator last);
    void new_dcl_spc(iterator first, iterator last);
    void declareTmplPrms(iterator first, iterator last);
    void declareClassTmplPrms(iterator first, iterator last);
    void addUsingDirective(iterator first, iterator last);
    void enableHandleTypeDef(iterator first, iterator last);
    void disableHandleTypeDef(iterator first, iterator last);
    void enableTemplateName(iterator first, iterator last);
    void disableTemplateName(iterator first, iterator last);
    void isLOpLastSmbGrt(iterator first, iterator last);
    void cancelLastPrm(iterator first, iterator last);
    void debug_point(iterator first, iterator last);
    void rememberDeclaratorId(iterator first, iterator last);

    extern rule_t isSpecialToken;
    extern rule_t isNotSpecialToken;
    extern rule_t CLASS_NAME_HELPER;
    extern rule_t ENUM_NAME_HELPER;
    extern rule_t TYPEDEF_NAME_HELPER;
    extern rule_t NAMESPACE_ALIAS_HELPER;
    extern rule_t ORIGINAL_NAMESPACE_NAME_HELPER;
    extern rule_t TEMPLATE_NAME_HELPER;
    extern rule_t TYPE_DECL_VALID;
    extern rule_t TYPE_DECL_VALID_HELP;
    extern rule_t LASTSMBFLOPISGREATER;
    extern bool isEnableHandleTypeDef;
}} // namespace cnome { namespace actions {

#endif // ACTIONS_H

